package cn.wy.day02;


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/*
* 题目：两数相加
* 给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
* 如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。
* 您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
* 示例：
* 输入：(2 -> 4 -> 3) + (5 -> 6 -> 4)
* 输出：7 -> 0 -> 8
* 原因：342 + 465 = 807
*Related Topics 链表 数学
 * */
public class Soultion2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        List<Integer> nums1 = new ArrayList();
        List<Integer> nums2 = new ArrayList();

        //将字符串分割转换为链表
        String[] nums = sc.nextLine().replace(" ","").split("\\+");
        String[] num1Str = nums[0].substring(1, nums[0].length() - 1).split("->");
        String[] num2Str = nums[1].substring(1, nums[1].length() - 1).split("->");
        for (int i = 0; i < num1Str.length; i++) {
            nums1.add(Integer.parseInt(num1Str[i]));
        }

        for (int i = 0; i < num2Str.length; i++) {
            nums2.add(Integer.parseInt(num2Str[i]));
        }

        //开始加法运算
        List<Integer> sums = method1(nums1, nums2);

        //打印输出结果
        for (int i = 0; i < sums.size(); i++) {
            System.out.print(sums.get(i));
            if(i < sums.size()-1) {
                System.out.print("->");
            }
        }

    }


    public static List<Integer> method1(List<Integer> nums1,List<Integer> nums2) {
        List<Integer> sum = new ArrayList<>();//存储加法结果
        int length = nums1.size()>nums2.size()?nums1.size():nums2.size();//获得两个加数的最大长度
        int[] flag = new int[length+1];//存放每个位置进位的数，因为和最多有length+1位
        for (int i = 0; i < length; i++) {

            Integer temp = null;//存储两个整数相加的结果（若进位，则是求余后的数据）

            if(i<= nums1.size()-1 && i<= nums2.size()-1) {//加数A和B都还有数据
                temp = nums1.get(i) + nums2.get(i) + flag[i] ;  //各位的和 = A + B + 进位数
            }
            if(i<= nums1.size()-1 && i > nums2.size()-1) {//加数A有数据，B没数据
                temp = nums1.get(i) + 0 + flag[i];
            }
            if(i > nums1.size()-1 && i<=nums2.size()-1) {//加数A没有数据，B有数据
                temp = 0 + nums2.get(i) + flag[i];
            }

            if(temp >= 10){
                //需要进位
                temp = temp % 10;
                flag[i+1] = 1;
                sum.add(temp);
                if(i == length-1){ //若此时为最后一位且进位，则sum追加以为数据
                    sum.add(flag[length]);
                }
                continue;
            }
            sum.add(temp);//将结果加到sum和上
        }
        return sum;
    }
}
